
package paneles;

import arreglos.ClienteArrayList;
import com.toedter.calendar.JDateChooser;
import com.toedter.calendar.JSpinnerDateEditor;
import constantes.Constantes;
import entidades.Cliente;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import principal.Principal;
import util.Utilitarios;
import util.Validaciones;


public class PanelModificarCliente extends JPanel implements ActionListener {

	private JLabel lblAgregarClienteTitulo;
	
	private JLabel lblNombreCliente;
	private JLabel lblApePaternoCliente;
	private JLabel lblApeMaternoCliente;
	private JLabel lblDniCliente;
	private JLabel lblDireccionCliente;
	private JLabel lblFechaNacimientoCliente;
	private JLabel lblTarjetaBonus;
	private JLabel lblPuntosBonus;
	private JLabel lblTelefono;
	private JLabel lblEmailCliente;
	private JLabel lblCodigoCliente;

	private JTextField txtNombreCliente;
	private JTextField txtApePaternoCliente;
	private JTextField txtApeMaternoCliente;
	private JTextField txtDniCliente;
	private JTextField txtDireccionCliente;
	private JTextField txtCodigoCliente;

	private JTextField txtTarjetaBonus;
	private JTextField txtPuntosBonus;
	private JTextField txtTelefono;
	private JTextField txtEmailCliente;
    
    
    private JDateChooser txtFechaNacimientoCliente;
    private JButton btnBuscarCliente;
    private JButton btnModificarCliente;
    private JButton btnLimpiarCliente;
    private JButton btnCancelar;
    private JInternalFrame modificarCliente;
    private String dniAntesActualizar;

    public PanelModificarCliente(Principal pAppletPrincipal, JInternalFrame pModificarCliente) {

        this.modificarCliente = pModificarCliente;

        lblAgregarClienteTitulo = new JLabel("Modificar cliente", JLabel.CENTER);
        lblAgregarClienteTitulo.setBounds(0, 15, 500, 35);
        lblAgregarClienteTitulo.setForeground(Color.red);
        lblAgregarClienteTitulo.setOpaque(true);
        //lblAgregarClienteTitulo.setBackground(Color.white);
        lblAgregarClienteTitulo.setFont(new Font("Dialog", Font.BOLD, 18));
        this.add(lblAgregarClienteTitulo);

        lblCodigoCliente = new JLabel("Codigo Cliente:", JLabel.RIGHT);
        lblCodigoCliente.setBounds(0, 50, 210, 25);
        lblCodigoCliente.setForeground(Color.red);
        lblCodigoCliente.setOpaque(true);
        //lblNombreCliente.setBackground(Color.white);
        lblCodigoCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(lblCodigoCliente);

        lblNombreCliente = new JLabel("Nombre:", JLabel.RIGHT);
        lblNombreCliente.setBounds(0,80, 210, 25);
        lblNombreCliente.setForeground(Color.red);
        lblNombreCliente.setOpaque(true);
        //lblNombreCliente.setBackground(Color.white);
        lblNombreCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(lblNombreCliente);

        lblApePaternoCliente = new JLabel("Apellido paterno:", JLabel.RIGHT);
        lblApePaternoCliente.setBounds(0,110, 210, 25);
        lblApePaternoCliente.setForeground(Color.red);
        lblApePaternoCliente.setOpaque(true);
        //lblApePaternoCliente.setBackground(Color.white);
        lblApePaternoCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(lblApePaternoCliente);

        lblApeMaternoCliente = new JLabel("Apellido materno:", JLabel.RIGHT);
        lblApeMaternoCliente.setBounds(0,140, 210, 25);
        lblApeMaternoCliente.setForeground(Color.red);
        lblApeMaternoCliente.setOpaque(true);
        //lblApeMaternoCliente.setBackground(Color.white);
        lblApeMaternoCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(lblApeMaternoCliente);

        lblDniCliente = new JLabel("Documento identidad:", JLabel.RIGHT);
        lblDniCliente.setBounds(0, 170, 210, 25);
        lblDniCliente.setForeground(Color.red);
        lblDniCliente.setOpaque(true);
        //lblDniCliente.setBackground(Color.white);
        lblDniCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(lblDniCliente);

        lblDireccionCliente = new JLabel("Direccion:", JLabel.RIGHT);
        lblDireccionCliente.setBounds(0,200, 210, 25);
        lblDireccionCliente.setForeground(Color.red);
        lblDireccionCliente.setOpaque(true);
        //lblDireccionCliente.setBackground(Color.white);
        lblDireccionCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(lblDireccionCliente);

       

        lblFechaNacimientoCliente = new JLabel("Fecha nacimiento:", JLabel.RIGHT);
        lblFechaNacimientoCliente.setBounds(0, 230, 210, 25);
        lblFechaNacimientoCliente.setForeground(Color.red);
        lblFechaNacimientoCliente.setOpaque(true);
        //lblFechaNacimientoCliente.setBackground(Color.white);
        lblFechaNacimientoCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(lblFechaNacimientoCliente);
        
        lblTarjetaBonus = new JLabel("Tarjeta Bonus:", JLabel.RIGHT);
		lblTarjetaBonus.setBounds(0, 260, 210, 25);
		lblTarjetaBonus.setForeground(Color.red);
		lblTarjetaBonus.setOpaque(true);
		lblTarjetaBonus.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblTarjetaBonus);

		lblPuntosBonus = new JLabel("Puntos:", JLabel.RIGHT);
		lblPuntosBonus.setBounds(0,290, 210, 25);
		lblPuntosBonus.setForeground(Color.red);
		lblPuntosBonus.setOpaque(true);
		lblPuntosBonus.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblPuntosBonus);
		
		lblTelefono = new JLabel("Telefono:", JLabel.RIGHT);
		lblTelefono.setBounds(0,320, 210, 25);
		lblTelefono.setForeground(Color.red);
		lblTelefono.setOpaque(true);
		lblTelefono.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(lblTelefono);
		
        lblEmailCliente = new JLabel("Correo electronico:", JLabel.RIGHT);
        lblEmailCliente.setBounds(0, 350, 210, 25);
        lblEmailCliente.setForeground(Color.red);
        lblEmailCliente.setOpaque(true);
        //lblEmailCliente.setBackground(Color.white);
        lblEmailCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(lblEmailCliente);


        txtCodigoCliente = new JTextField();
        txtCodigoCliente.setBounds(215, 50, 100, 20);
        txtCodigoCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(txtCodigoCliente);

        txtNombreCliente = new JTextField();
        txtNombreCliente.setBounds(215,80, 200, 20);
        txtNombreCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        txtNombreCliente.setEnabled(false);
        this.add(txtNombreCliente);

        txtApePaternoCliente = new JTextField();
        txtApePaternoCliente.setBounds(215,110, 200, 20);
        txtApePaternoCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        txtApePaternoCliente.setEnabled(false);
        this.add(txtApePaternoCliente);

        txtApeMaternoCliente = new JTextField();
        txtApeMaternoCliente.setBounds(215, 140, 200, 20);
        txtApeMaternoCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        txtApeMaternoCliente.setEnabled(false);
        this.add(txtApeMaternoCliente);

        txtDniCliente = new JTextField();
        txtDniCliente.setBounds(215, 170,160, 20);
        txtDniCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        this.add(txtDniCliente);
      
        txtDireccionCliente = new JTextField();
        txtDireccionCliente.setBounds(215, 200, 200, 20);
        txtDireccionCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        txtDireccionCliente.setEnabled(false);
        this.add(txtDireccionCliente);


        txtFechaNacimientoCliente = new JDateChooser(null, null, null, new JSpinnerDateEditor());
        txtFechaNacimientoCliente.setBounds(215,230, 200, 20);
        txtFechaNacimientoCliente.setFont(new Font("Dialog", Font.BOLD, 12));
        /*Establece la fecha maxima de seleccion para el
        año de nacimiento*/
        Date date = Utilitarios.FechaMaximaDeSeleccion();
        txtFechaNacimientoCliente.setMaxSelectableDate(date);
        txtFechaNacimientoCliente.setDate(date);
        txtFechaNacimientoCliente.setEnabled(false);
        this.add(txtFechaNacimientoCliente);
        
        txtTarjetaBonus = new JTextField();
		txtTarjetaBonus.setBounds(215, 260, 200, 20);
		txtTarjetaBonus.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtTarjetaBonus);

		txtPuntosBonus = new JTextField();
		txtPuntosBonus.setBounds(215, 290, 200, 20);
		txtPuntosBonus.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtPuntosBonus);
		
		txtTelefono = new JTextField();
		txtTelefono.setBounds(215,320, 200, 20);
		txtTelefono.setFont(new Font("Dialog", Font.BOLD, 12));
		this.add(txtTelefono);

	    txtEmailCliente = new JTextField();
	    txtEmailCliente.setBounds(215,350, 200, 20);
	    txtEmailCliente.setFont(new Font("Dialog", Font.BOLD, 12));
	    this.add(txtEmailCliente);


        btnBuscarCliente = new JButton("Buscar");
        btnBuscarCliente.setBounds(315, 50, 100, 20);
        btnBuscarCliente.addActionListener(this);
        this.add(btnBuscarCliente);


        btnModificarCliente = new JButton("Grabar");
        btnModificarCliente.setBounds(100, 380, 90, 30);
        btnModificarCliente.addActionListener(this);
        btnModificarCliente.setEnabled(false);
        this.add(btnModificarCliente);


        btnLimpiarCliente = new JButton("Limpiar");
        btnLimpiarCliente.setBounds(200, 380, 90, 30);
        btnLimpiarCliente.addActionListener(this);
        btnLimpiarCliente.setEnabled(false);
        this.add(btnLimpiarCliente);

        btnCancelar = new JButton("Cancelar");
        btnCancelar.setBounds(300, 380, 90, 30);
        btnCancelar.addActionListener(this);
        btnCancelar.setEnabled(false);
        this.add(btnCancelar);





    }

    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == btnBuscarCliente) {
            BuscarDatosCliente();
        }
        if (e.getSource() == btnModificarCliente) {
            ModificarDatosCliente();
        }
        if (e.getSource() == btnLimpiarCliente) {
            LimpiarDatosCliente();
        }
        if (e.getSource() == btnCancelar) {
            LimpiarDatosCliente();
            HabilitarControles(false);
            txtCodigoCliente.setEnabled(true);
            btnBuscarCliente.setEnabled(true);
        }
    }

    private void BuscarDatosCliente() {
        Cliente cliente = null;
        ClienteArrayList clienteArrayList = null;
        try {
            cliente = new Cliente();
            cliente.setCodigo(txtCodigoCliente.getText().trim());
            clienteArrayList = new ClienteArrayList();
            cliente = clienteArrayList.BuscarDatosClientePorCodigo(cliente);
            Object codigo = cliente.getCodigo();
            if (codigo != null) {
                txtCodigoCliente.setEnabled(false);
                btnBuscarCliente.setEnabled(false);

                HabilitarControles(true);

                txtNombreCliente.setText(cliente.getNombre());
                txtApePaternoCliente.setText(cliente.getApellidoPaterno());
                txtApeMaternoCliente.setText(cliente.getApellidoMaterno());               
                txtDireccionCliente.setText(cliente.getDireccion());       
                Date date = Utilitarios.ConvertirCadenaFecha(cliente.getFechaNacimiento());
                txtFechaNacimientoCliente.setDate(date);
                dniAntesActualizar = cliente.getDni();
                txtDniCliente.setText(cliente.getDni());
                txtEmailCliente.setText(cliente.getEmail());
                txtPuntosBonus.setText(String.valueOf(cliente.getPuntos()));
                txtTarjetaBonus.setText(String.valueOf(cliente.getNumTarjetaBonus()));
                txtTelefono.setText(cliente.getTelefono());
                

            } else {
                Utilitarios.MostrarMensajeAlerta(modificarCliente, "No se encontro ningun cliente");
            }
        } catch (Exception ex) {
        }

    }

    private void HabilitarControles(boolean value) {
        btnLimpiarCliente.setEnabled(value);
        btnModificarCliente.setEnabled(value);
        btnCancelar.setEnabled(value);
        txtNombreCliente.setEnabled(value);
        txtApePaternoCliente.setEnabled(value);
        txtApeMaternoCliente.setEnabled(value);      
        txtDireccionCliente.setEnabled(value);       
        txtFechaNacimientoCliente.setEnabled(value);
        txtDniCliente.setEnabled(value);
        txtEmailCliente.setEnabled(value);
        txtPuntosBonus.setEditable(value);
        txtTarjetaBonus.setEditable(value);
        
    }

    private void LimpiarDatosCliente() {
        txtCodigoCliente.setText("");
        txtNombreCliente.setText("");
        txtApePaternoCliente.setText("");
        txtApeMaternoCliente.setText("");
        txtDireccionCliente.setText("");
        txtNombreCliente.requestFocus();
        txtDniCliente.setText("");
        txtEmailCliente.setText("");
        txtPuntosBonus.setText("");
        txtTarjetaBonus.setText("");
        txtTelefono.setText("");
    }

    /*Permite modificar un cliente */
    private void ModificarDatosCliente() {
        Cliente cliente = null;
        ClienteArrayList clienteArrayList = null;
        try {
            cliente = new Cliente();
            cliente.setCodigo(txtCodigoCliente.getText().trim());
            cliente.setNombre(txtNombreCliente.getText().trim());
            cliente.setApellidoPaterno(txtApePaternoCliente.getText().trim());
            cliente.setApellidoMaterno(txtApeMaternoCliente.getText().trim());          
            cliente.setDireccion(txtDireccionCliente.getText().trim());       
            Date date = txtFechaNacimientoCliente.getDate();
            String fecha = Utilitarios.FormatearFechaCadena(date);
            cliente.setFechaNacimiento(fecha);
            cliente.setDni(txtDniCliente.getText().trim());
            cliente.setEmail(txtEmailCliente.getText().trim());
            cliente.setTelefono(txtTelefono.getText().trim());
            cliente.setNumTarjetaBonus(Integer.valueOf(txtTarjetaBonus.getText().trim()));
            cliente.setPuntos(Integer.valueOf(txtPuntosBonus.getText().trim()));
           
            clienteArrayList = new ClienteArrayList();

            if (ValidarFormularioModificarClientes(cliente)) {

                clienteArrayList.ModificarCliente(cliente);
            
                    Utilitarios.MostrarMensajeInformacion(modificarCliente, "Se modifico el cliente correctamente");
                    LimpiarDatosCliente();
                    HabilitarControles(false);
                    txtCodigoCliente.setEnabled(true);
                    btnBuscarCliente.setEnabled(true);
                

            }

        } catch (Exception ex) {
        }
    }

    private boolean ValidarFormularioModificarClientes(Cliente pCliente) {
        boolean resultado = false;
        /*Comprobar si los campos estan vacios*/
        if (pCliente.getNombre().equals("")) {
            txtNombreCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "Ingrese nombre");
            return false;
        }
        if (pCliente.getApellidoPaterno().equals("")) {
            txtApePaternoCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "Ingrese apellido paterno");
            return false;
        }
        if (pCliente.getApellidoMaterno().equals("")) {
            txtApeMaternoCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "Ingrese apellido materno");
            return false;
        }
     
   
        if (pCliente.getDireccion().equals("")) {
            txtDireccionCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "Ingrese direccion");
            return false;
        }
    
        if (pCliente.getFechaNacimiento().equals("")) {
            txtFechaNacimientoCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "Ingrese fecha nacimiento");
            return false;
        }

        /*Comprobar si los datos estan bien ingresados*/
        if (!(Validaciones.validarNombres(pCliente.getNombre()))) {
            txtNombreCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El nombre no es valido");
            return false;
        }
        if (!(Validaciones.validarLongitudCampo(pCliente.getNombre(),
                Constantes.longitudNombre, Constantes.longitudMenor_Que))) {
            txtNombreCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El nombre no tiene una longitud valida");
            return false;
        }
        if (!(Validaciones.validarNombres(pCliente.getApellidoPaterno()))) {
            txtApePaternoCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El apellido paterno no es valido");
            return false;
        }
        if (!(Validaciones.validarLongitudCampo(pCliente.getApellidoPaterno(),
                Constantes.longitudApePat, Constantes.longitudMenor_Que))) {
            txtApePaternoCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El apellido paterno no tiene una longitud valida");
            return false;
        }
        if (!(Validaciones.validarNombres(pCliente.getApellidoMaterno()))) {
            txtApeMaternoCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El apellido materno no es valido");
            return false;
        }
        if (!(Validaciones.validarLongitudCampo(pCliente.getApellidoMaterno(),
                Constantes.longitudApeMat, Constantes.longitudMenor_Que))) {
            txtApeMaternoCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El apellido materno no tiene una longitud valida");
            return false;
        }
        
        if (!(Validaciones.validarSoloNumeros(pCliente.getDni()))) {
            txtDniCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El Dni no es válido");
            return false;

        }
        if (!(Validaciones.validarLongitudCampo(pCliente.getDni(),
                Constantes.longitudDni, Constantes.longitudIgual_A))) {
            txtDniCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El Dni no tiene una longitud válida");
            return false;
        }
    
 
        if (!(Validaciones.validarDireccion(pCliente.getDireccion()))) {
            txtDireccionCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "La  direccion no es valida");
            return false;
        }
        if (!(Validaciones.validarLongitudCampo(pCliente.getDireccion(),
                Constantes.longitudDireccion, Constantes.longitudMenor_Que))) {
            txtDireccionCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "La  direccion no tiene una longitud valida");
            return false;
        }
        
        if (!(Validaciones.validarEmail(pCliente.getEmail()))) {
            txtEmailCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El correo electrónico no es válido");
            return false;
        }
        if (!(Validaciones.validarLongitudCampo(pCliente.getEmail(),
                Constantes.longitudEmail, Constantes.longitudMenor_Que))) {
            txtEmailCliente.requestFocus();
            Utilitarios.MostrarMensajeAlerta(modificarCliente, "El correo electrónico no tiene una longitud válida");
            return false;
        }
    
     
        resultado = true;

        return resultado;
    }
}

